﻿// 文件操作
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>

void read_style_c()
{
    // 打开文件
    FILE* pfSample = fopen("sample1.txt", "rb");

    // 可选: 测试是否一切正常
    if (pfSample == nullptr) {
        printf("ERROR: Cannot open file sample1.txt!\n");
        return;
    }

    // 可选: 检查一下文件有多大
    fseek(pfSample, 0, SEEK_END);
    unsigned int uLen = ftell(pfSample);
    printf("The file sample.txt have %u bytes.\n", uLen);

    // 回到文件首
    fseek(pfSample, 0, SEEK_SET);
    // 读取文件里的整数
    int x;
    while (fscanf(pfSample, "%d", &x) != EOF) {
        printf("%d\n", x);
    }

    // 千万不要忘记关闭文件
    fclose(pfSample);
}

void read_style_cpp()
{
    // 打开文件
    std::ifstream fsSample("sample1.txt", std::ios_base::in|std::ios_base::binary);

    // 可选: 测试是否一切正常
    if (!fsSample.good()) {
        std::cout << "ERROR: Cannot open file sample1.txt!" << std::endl;
        return;
    }

    // 可选: 检查一下文件有多大
    fsSample.seekg(0, std::ios_base::end);
    unsigned int uLen = static_cast<unsigned int>(fsSample.tellg());
    std::cout << "The file sample.txt have " << uLen << " bytes." << std::endl;

    // 回到文件首
    fsSample.seekg(0, std::ios_base::beg);

    // 读取文件里的整数
    int x;
    while (fsSample >> x) { // C++风格的写法
        std::cout << x << std::endl;
    }

    // 千万不要忘记关闭文件
    fsSample.close();
}

int main()
{
    read_style_c();
    // read_style_cpp();
    return 0;
}

// 思考: 如果文件里是浮点数该怎么办？